home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d927.lha / Telnet / src / main.c < prev    next >
C/C++ Source or Header  |  1993-10-07  |  4KB  |  195 lines

  1. /*
  2.  * Copyright (c) 1988, 1990 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted provided
  6.  * that: (1) source distributions retain this entire copyright notice and
  7.  * comment, and (2) distributions including binaries display the following
  8.  * acknowledgement:  ``This product includes software developed by the
  9.  * University of California, Berkeley and its contributors'' in the
  10.  * documentation or other materials provided with the distribution and in
  11.  * all advertising materials mentioning features or use of this software.
  12.  * Neither the name of the University nor the names of its contributors may
  13.  * be used to endorse or promote products derived from this software without
  14.  * specific prior written permission.
  15.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  16.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  17.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  */
  19.  
  20. #ifndef lint
  21. char copyright[] =
  22. "@(#) Copyright (c) 1988, 1990 Regents of the University of California.\n\
  23.  All rights reserved.\n";
  24. #endif /* not lint */
  25.  
  26. #ifndef lint
  27. static char sccsid[] = "@(#)main.c    5.1 (Berkeley) 9/14/90";
  28. #endif /* not lint */
  29.  
  30. #include <sys/types.h>
  31. #include <string.h>
  32.  
  33. #include "ring.h"
  34. #include "externs.h"
  35. #include "defines.h"
  36. #ifdef AMI_TCP
  37. #include  <bsdsocket.h>
  38. #else
  39. #include  <ss/socket.h>
  40. #endif
  41.  
  42. /*
  43.  * Initialize variables.
  44.  */
  45. void
  46. tninit()
  47. {
  48.     init_terminal();
  49.  
  50.     init_network();
  51.     
  52.     init_telnet();
  53.  
  54.     init_sys();
  55.  
  56. }
  57.  
  58. int    autologin;
  59. #ifdef __SASC
  60.     int Enable_Abort;
  61. #endif
  62. #ifdef AMI_TCP
  63.     struct Library *SocketBase = 0;
  64. #else
  65.     struct Library *SockBase = 0;
  66. #endif
  67. struct Library *OpenLibrary();
  68. FILE *log_file = 0;
  69. long bytesin,
  70.      bytesout;
  71.  
  72. void closesockets(void)
  73. {
  74. #ifdef AMI_TCP    
  75.     if (SocketBase)
  76.         {
  77.         CloseLibrary(SocketBase);
  78.         SocketBase = 0;
  79.         }
  80. #else
  81.     if (SockBase)
  82.         {
  83.         cleanup_sockets();
  84.         CloseLibrary(SockBase);
  85.         SockBase = 0;
  86.         }
  87. #endif
  88.     if (log_file)
  89.         fclose(log_file);
  90. }
  91.  
  92. /*
  93.  * main.  Parse arguments, invoke the protocol or command parser.
  94.  */
  95.  
  96. main(argc, argv)
  97.     int argc;
  98.     char *argv[];
  99. {
  100.     extern char *optarg;
  101.     extern int optind;
  102.     int ch;
  103.     char *user, *strrchr();
  104.     char fname[128];
  105.     extern int Enable_Abort;
  106.  
  107.     Enable_Abort = 0;
  108.  
  109. #ifdef AMI_TCP
  110.     SocketBase = OpenLibrary("bsdsocket.library",0L);
  111.     if (! SocketBase)
  112.         exit(0);
  113.     SetErrnoPtr(&errno,sizeof(errno));
  114. #else
  115.     SockBase = OpenLibrary("socket.library",0L);
  116.     if (! SockBase)
  117.         exit(0);
  118.     setup_sockets(3,&errno);
  119. #endif
  120.  
  121.     atexit(closesockets);
  122.  
  123.     tninit();        /* Clear out things */
  124.  
  125.     TerminalSaveState();
  126.  
  127.     if (prompt = strrchr(argv[0], '/'))
  128.         ++prompt;
  129.     else
  130.         prompt = argv[0];
  131.  
  132.     user = NULL;
  133.     autologin = 0;
  134.     while ((ch = getopt(argc, argv, "ade:l:n:")) != EOF) {
  135.         switch(ch) {
  136.         case 'a':
  137.             autologin = 1;
  138.             break;
  139.         case 'd':
  140.             debug = 1;
  141.             break;
  142.         case 'e':
  143.             set_escape_char(optarg);
  144.             break;
  145.         case 'L':
  146.             strcpy(fname,optarg);
  147.             log_file = fopen(fname,"a");
  148.             break;
  149.         case 'n':
  150.                 SetNetTrace(optarg);
  151.             break;
  152.         case '?':
  153.         default:
  154.             usage();
  155.             /* NOTREACHED */
  156.         }
  157.     }
  158.     argc -= optind;
  159.     argv += optind;
  160.  
  161.     if (argc) {
  162.         char *args[7], **argp = args;
  163.  
  164.         if (argc > 2)
  165.             usage();
  166.         *argp++ = prompt;
  167.         if (user) {
  168.             *argp++ = "-l";
  169.             *argp++ = user;
  170.         }
  171.         *argp++ = argv[0];        /* host */
  172.         if (argc > 1)
  173.             *argp++ = argv[1];    /* port */
  174.         *argp = 0;
  175.  
  176.         if (setjmp(toplevel) != 0)
  177.             Exit(0);
  178.         if (tn(argp - args, args) == 1)
  179.             return (0);
  180.         else
  181.             return (1);
  182.     }
  183.     (void)setjmp(toplevel);
  184.     for (;;) {
  185.             command(1, 0, 0);
  186.     }
  187. }
  188.  
  189. usage()
  190. {
  191.     fprintf(stderr, "usage: %s [-a] [ [-l user] host-name [port] ]\n",
  192.         prompt);
  193.     exit(1);
  194. }
  195.